#ifndef _FILE_CRYPTO_H
#define _FILE_CRYPTO_H

#ifdef __cplusplus
extern "C" {
#endif

/*功能：生成密钥
  参数：cpuId 				[IN]cpu id
  	cpuIdSize 			[IN]cpu id大小
  	gpuId 				[IN]gpu id
  	gpuIdSize 			[IN]gpu id大小
  	key 					[OUT]文件加密密钥
  返回值：	
*/
int genKey(const char *cpuId, int cpuIdSize, const char *gpuId, int gpuIdSize, char *key);

/*功能：文件加密
  参数：key 				[IN]文件加密密钥
  	plainFileName 			[IN]原文文件绝对路径文件名
  	cipherFileName 		[IN]密文文件绝对路径文件名
  返回值：	
*/
int symFileEnc(const char *key, const char *plainFileName, const char *cipherFileName);

/*功能：文件加密
  参数：  	key 				[IN]文件解密密钥
  	cipherFileName 		[IN]密文文件绝对路径文件名
  	plainFileName 			[IN]原文文件绝对路径文件名
  返回值：	
*/
int symFileDec(const char *key, const char *cipherFileName, const char *plainFileName);



/*接口返回值说明*/
#define R_OK					0x0					//操作成功
#define R_BASE					0x0					//错误码基础值
#define R_UNKNOWERR				R_BASE+0x00000001	//操作失败
#define R_NULLPOINTER			R_BASE+0x00000002	//空指针
#define R_SIZEERR				R_BASE+0x00000008	//数据大小错误
#define R_ALGNOTSUPPORT			R_BASE+0x00000009	//不支持的算法调用
#define R_ALGMODNOTSUPPORT		R_BASE+0x0000000A	//不支持的算法模式调用
#define R_SYMOPERR				R_BASE+0x0000000F	//对称算法运算失败
#define R_KEYTYPEERR			R_BASE+0x00000014	//密钥类型错误
#define R_KEYERR				R_BASE+0x00000015	//密钥错误
#define R_RANDERR				R_BASE+0x00000017	//随机数产生失败
#define R_INARGERR				R_BASE+0x0000001D	//输入参数错误
#define R_OUTARGERR				R_BASE+0x0000001E	//输出参数错误
#define R_ALLOC_MEM_ERR		    R_BASE+0x0000001F   //分配内存错误
#define R_IN_MEM_ERR		    R_BASE+0x00000020   //输入数据缓冲区空间不足
#define R_OUT_MEM_ERR		    R_BASE+0x00000021   //输出数据缓冲区空间不足
#define R_PADDING_ERR		    R_BASE+0x00000022   //非法的填充数据
#define R_DEC_DATA_LEN_ERR		R_BASE+0x00000023   //解密数据长度小于16或不是16整数倍
#define R_OPEN_FILE_ERR			R_BASE+0x00000024	//打开文件失败
#define R_MEMORYERR				R_BASE+0x00000025	//内存错误
#define R_READ_FILE_ERR			R_BASE+0x00000026	//读文件失败
#define R_WRITE_FILE_ERR		R_BASE+0x00000027	//写文件失败

#ifdef __cplusplus
}
#endif

#endif